package com.duckclouddrive.service;

import com.duckclouddrive.entity.dto.SessionWebUserDto;
import com.duckclouddrive.entity.po.UserInfo;
import com.duckclouddrive.entity.query.UserInfoQuery;
import com.duckclouddrive.entity.vo.PaginationResultVO;

import java.util.List;


/**
 *  业务接口
 */
public interface UserInfoService {

	/**
	 * 根据条件查询列表
	 */
	List<UserInfo> findListByParam(UserInfoQuery param);

	/**
	 * 根据条件查询列表
	 */
	Integer findCountByParam(UserInfoQuery param);

	/**
	 * 分页查询
	 */
	PaginationResultVO<UserInfo> findListByPage(UserInfoQuery param);

	/**
	 * 新增
	 */
	Integer add(UserInfo bean);

	/**
	 * 批量新增
	 */
	Integer addBatch(List<UserInfo> listBean);

	/**
	 * 批量新增/修改
	 */
	Integer addOrUpdateBatch(List<UserInfo> listBean);
	/**
	 * 根据UserId查询对象
	 */
	UserInfo getUserInfoByUserId(String userId);


	/**
	 * 根据UserId修改
	 */
	Integer updateUserInfoByUserId(UserInfo bean, String userId);


	/**
	 * 根据UserId删除
	 */
	Integer deleteUserInfoByUserId(String userId);


	/**
	 * 根据Email查询对象
	 */
	UserInfo getUserInfoByEmail(String email);


	/**
	 * 根据Email修改
	 */
	Integer updateUserInfoByEmail(UserInfo bean,String email);


	/**
	 * 根据Email删除
	 */
	Integer deleteUserInfoByEmail(String email);


	/**
	 * 根据NickName查询对象
	 */
	UserInfo getUserInfoByNickName(String nickName);


	/**
	 * 根据NickName修改
	 */
	Integer updateUserInfoByNickName(UserInfo bean,String nickName);


	/**
	 * 根据NickName删除
	 */
	Integer deleteUserInfoByNickName(String nickName);


	/**
	 * 根据QqOpenId查询对象
	 */
	UserInfo getUserInfoByQqOpenId(String qqOpenId);


	/**
	 * 根据QqOpenId修改
	 */
	Integer updateUserInfoByQqOpenId(UserInfo bean,String qqOpenId);


	/**
	 * 根据QqOpenId删除
	 */
	Integer deleteUserInfoByQqOpenId(String qqOpenId);


    /**
     * 注册用户信息
     *
     * @param email 用户的电子邮件地址，用于接收验证邮件和作为登录名
     * @param nickName 用户的昵称，将在系统中显示
     * @param password 用户设定的登录密码，应进行加密存储
     * @param emailCode 用户输入的电子邮件验证码，用于验证电子邮件地址的有效性
     */
    void register(String email,String nickName,String password,String emailCode);

    /**
     * 用户登录系统
     *
     * @param email 用户的电子邮件地址，作为登录名
     * @param password 用户输入的登录密码
     * @return 返回包含用户信息的SessionWebUserDto对象，可用于后续的操作授权和用户状态维护
     */
    SessionWebUserDto login(String email,String password);

	void resetPwd(String email,String password,String emailCode);
	SessionWebUserDto qqLogin(String code);
	void updateUserStatus(String userId,Integer status);

	void changeUserSpace(String userId,Integer changeSpace);
}